package org.miframework.arqsw.frontcontroller;

import java.io.File;
import java.util.HashMap;
import java.util.Map;

import javax.servlet.http.HttpServlet;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;

import org.miframework.arqsw.controller.Controlador;
import org.w3c.dom.Document;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;

public class ControllerMap{
	
	public Map<String, Controlador> mapear(String config){
		Map<String, Controlador> controladores = new HashMap<String, Controlador>();
		
		DocumentBuilderFactory docBuilderFactory = DocumentBuilderFactory.newInstance();
		
		//System.out.println(getServletConfig().getServletContext().getRealPath("WEB-INF//config.xml"));
        DocumentBuilder docBuilder;
		try {
			docBuilder = docBuilderFactory.newDocumentBuilder();
			
			Document doc = docBuilder.parse (new File(config));
			NodeList nodos = doc.getElementsByTagName("controlador");
			String nombre="", clase="", url="";
			for(int i=0; i<nodos.getLength(); i++){
				Node controlador = nodos.item(i);
				for(int j=0; j<controlador.getChildNodes().getLength(); j++){
					if(controlador.getChildNodes().item(j).getNodeName().equals("nombre")){
						nombre = controlador.getChildNodes().item(j).getTextContent();					
					}
					else if(controlador.getChildNodes().item(j).getNodeName().equals("clase")){
						clase = controlador.getChildNodes().item(j).getTextContent();					
					}
					else if(controlador.getChildNodes().item(j).getNodeName().equals("url")){
						url = controlador.getChildNodes().item(j).getTextContent();					
					}
				}
				//System.out.println("url: " + url + " Nombre: " + nombre + " Clase: " + clase );
				Class Manejador = Class.forName (clase); 
				Controlador c = (Controlador)Manejador.newInstance();
				controladores.put(url,c);
			}
			
		} catch (Exception e) {
			// TODO Auto-generated catch block
			System.out.println("error en el xml");
			e.printStackTrace();
		}
		return controladores;
	}
	
}
